/**
 * 
 */
package sistema.contexto.validador.dao;

import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import sistema.contexto.validador.ValidadorIF;
import sistema.usuario.UsuarioIF;
import util.InvalidFileException;

/**
 * @author Thiago Emmanuel Pereira da Cunha Silva, thiago.manel@gmail.com
 * @since 16/04/2006
 */
public class ValidadorXMLDAO implements ValidadorDAO {

	private Map<String, ValidadorIF> validadores;
	private final String rootDirectory =   "data";	//FIXME: TIRA ISSO DAQUI
	private final String baseFile =   "valida.xml";//FIXME: TIRA ISSO DAQUI
	
	public ValidadorXMLDAO(){
		this.validadores = fromData();
	}
	
	/* (non-Javadoc)
	 * @see sistema.contexto.validador.dao.ValidadorDAO#addValidador(sistema.contexto.validador.Validador)
	 */
	public void addValidador(ValidadorIF validador) {
		validadores.put(validador.getIdentificador(), validador);
		this.toData(this.validadores);
	}

	/* (non-Javadoc)
	 * @see sistema.contexto.validador.dao.ValidadorDAO#getValidador(java.lang.String)
	 */
	public ValidadorIF getValidador(String idValidador) {
		return validadores.get(idValidador);
	}

	/* (non-Javadoc)
	 * @see sistema.contexto.validador.dao.ValidadorDAO#getValidadores()
	 */
	public Collection<ValidadorIF> getValidadores() {
		return validadores.values();
	}
	
	private  void toData( Map validadores )  {
		try {
			//TODO FIXME refazer, eh aqui mesmo essa verificacao?
			if(!new File(rootDirectory+File.separator+baseFile).exists()) {
				new File(rootDirectory+File.separator+baseFile).createNewFile();
			}
			new ValidadorFileWritter().processFile(rootDirectory+File.separator+baseFile, validadores);
		} catch (Exception e) {
			//decidir quem vai tratar
		}
	}

	private Map fromData( ) {
		try {
			//TODO FIXME refazer, eh aqui mesmo essa verificacao?
			if(!new File(rootDirectory+File.separator+baseFile).exists()) {
				new File(rootDirectory+File.separator+baseFile).createNewFile();
			}
			return (Map) new ValidadorFileReader().processFile(rootDirectory+File.separator+baseFile);
		} catch (Exception e) {
		}
		return new HashMap<String, ValidadorIF>(); 
	}
	
	public void zerarDados() {
		this.validadores = new HashMap<String,ValidadorIF>();
		this.toData(validadores);
	}
}
